package co.edu.udea.iw.tusanimes.dao.impl;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.tusanimes.dao.NoticiaDao;
import co.edu.udea.iw.tusanimes.dao.exception.DAOException;
import co.edu.udea.iw.tusanimes.dto.Noticia;


/**
 * 
 * Implementaci�n de la Interfaz NoticiaDao
 * 
 * @author Camila Naranjo
 * @versi�n 1.0
 * 
 */
public class NoticiaDaoImpl extends HibernateDaoSupport implements NoticiaDao {

	/**
	 * M�todo obtener, para obtener una noticia de la tabla de Noticias
	 * 
	 * @param idNoticia
	 *            Identificador de la noticia.
	 * @return Noticia Noticia encontrada.
	 * @throws DAOException
	 */
	@Override
	public Noticia obtenerNoticia(int idNoticia) throws DAOException {
		Session session = null;
		Noticia noticia = null;
		try {
			session = getSession();
			noticia = (Noticia) session.createCriteria(Noticia.class)
					.add(Restrictions.eq("id", idNoticia)).uniqueResult();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return noticia;
	}

	/**
	 * M�todo para crear una nueva noticia a la tabla de Noticias
	 * 
	 * @param noticia
	 *            Noticia a guardar.
	 * @return Noticia Noticia Guardada
	 * @throws DAOException
	 */
	@Override
	public Noticia crearNoticia(Noticia noticia) throws DAOException {
		Session session = null;
		Transaction tx = null;
		try {
			session = getSession();
			tx = session.beginTransaction();

			session.save(noticia);
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return noticia;
	}

	/**
	 * M�todo eliminar una noticia en la tabla de Noticias
	 * 
	 * @param idNoticia
	 *            Identificador de la noticia.
	 * @throws DAOException
	 */

	public void eliminar(int idNoticia) throws DAOException {
		Session session = null;
		Transaction tx = null;
		Query query = null;
		String sql;
		try {
			session = getSession();
			tx = session.beginTransaction();
			sql = "delete from Noticia where idnoticia= :id";
			query = session.createQuery(sql);

			query.setInteger("id", idNoticia);
			query.executeUpdate();
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
	}

	/**
	 * M�todo actualizar una noticia en la tabla de Noticias
	 * 
	 * @param noticia
	 *            Noticia a actualizar.
	 * @return Noticia Noticia atualizada.
	 * @throws DAOException
	 */

	@Override
	public Noticia actualizarNoticia(Noticia noticia) throws DAOException {
		Transaction tx = null;
		try {
			Session session =getSession();
			tx = session.beginTransaction();
			session.update(noticia);
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return noticia;
	}

}
